
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
// stat函数:获取文件属性
int main()
{
    struct stat buf;
    const char  filename[] = "stat.c"; //普通文件
    // const char filename[] = "/dev/log";//套接字wenjian
    // const char filename[] = "/dev/tty";//字符设备文件
    // const char filename[] = "/dev";//文件夹
    // const char filename[] = "/dev/sr0";//块设备文件
    // const char filename[] =
    // "/dev/dvd";//这是一个链接文件,链接到一个块设备文件,但得到的文件类型却是块设备文件
    char* str = NULL;
    if(-1 == stat(filename, &buf)) {
        perror("stat:");
        return -1;
    }
    printf("inode number = %d\n uid = %d\n gid = %d\n ", buf.st_ino, buf.st_uid,
        buf.st_gid);
    if(S_ISREG(buf.st_mode)) {
        str = "普通文件";
        printf("filesize = %d\n", buf.st_size);
    } else if(S_ISDIR(buf.st_mode)) {
        str = "文件夹";
    } else if(S_ISCHR(buf.st_mode)) {
        str = "字符设备文件";
    } else if(S_ISBLK(buf.st_mode)) {
        str = "块设备文件";
    } else if(S_ISFIFO(buf.st_mode)) {
        str = "管道文件";
    } else if(S_ISSOCK(buf.st_mode)) {
        str = "套接字文件";
    } else if(S_ISLNK(buf.st_mode)) {
        str = "链接文件";
    }
    // else if(__S_IFLNK == buf.st_mode & __S_IFMT){
    //     str = "链接文件";
    // }
    printf("%s\n", str);


    return 0;
}